/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package modele;

import java.util.HashMap;

/**
 * Classe représente les Salles, propriétés de base du jeu
 * @author EpsilonE
 */
public class Salle extends Propriete
{
    private final int nbMaxPC = 4;
    private int nbPC;
    private boolean serveur;
    private boolean constructible;
    private final int prixPC;
    
    public Salle(String No, int Nu, Groupe Tg, int Pr, int Lo, int PrPC, boolean achetable, boolean aVendre)
    {
        super(No, Nu, Tg, Pr, Lo, achetable, aVendre);
        this.nbPC = 0;
        this.serveur = false;
        this.constructible = false;
        this.prixPC = PrPC;
    }
    
    @Override
    /**
     * Détermine si le joueur achete la Salle, ou s'il doit payer un loyer
     * @param j Joueur ayant tiré la carte
     * @param p Plateau du jeu
     */
    public void effet(Joueur j, Plateau p) 
    {
        if(aVendre)
        {
            if(j.getSolde() >= prix)
            {
                j.diminuerSolde(prix);
                proprietaire = j;
                aVendre = false;
                j.addPropriete(this);
            }
        }
        
        else
        {
            if(!j.equals(proprietaire))
            {
                int loyer = calculLoyer(proprietaire);
                proprietaire.augmenterSolde(loyer);
                j.diminuerSolde(loyer);
            }
        }
    }
    
    /**
     * @return the nbMaxPC
     */
    public int getNbMaxPC() 
    {
        return nbMaxPC;
    }

    /**
     * @return the nbPC
     */
    public int getNbPC() 
    {
        return nbPC;
    }

    /**
     * @return the serveur
     */
    public boolean getServeur() 
    {
        return serveur;
    }

    public boolean isConstructible() 
    {
        return constructible;
    }

    public void setConstructible(boolean constructible) 
    {
        this.constructible = constructible;
    }
    
    /**
     * @return the prixPC
     */
    public int getPrixPC() 
    {
        return prixPC;
    }
    
    public void construirePC() 
    {
        if(nbPC < nbMaxPC)
        {
            nbPC = nbPC++;
        }
        else
        {
            nbPC = 0;
            serveur = true;
            constructible = false;
        }
    }
    
    public void detruirePC() 
    {
        if(serveur)
        {
            serveur = false;
            nbPC = nbMaxPC;
        }
        else
        {
            nbPC--;
        }
    } 

    /**
    * @param serveur the serveur to set
    */
    public void setServeur(boolean serveur) 
    {
        this.serveur = serveur;
    }
    
    /**
     * Calcul le loyer selon les règles du jeu : si le groupe est complet et le terrain nu : le loyer est double
     * S'il y a un PC ou un serveur : le loyer est multiplié par le coefficient approprié
     * @param j
     * @return 
     */
    public int calculLoyer(Joueur j) 
    {
        int resultat = loyer;
        
        if(checkGroupeComplet(j))
        {
            if(serveur)
            {
                resultat *= 50;
            }
            else
            {
                switch(nbPC)
                {
                    case 0 : resultat *= 2; 
                    break;
                    case 1 : resultat *= 4; 
                    break;
                    case 2 : resultat *= 12; 
                    break;
                    case 3 : resultat *= 30; 
                    break;
                    case 4 : resultat *= 40; 
                    break;      
                }
            }
        }

        return resultat;
    }
    
    public boolean checkGroupeComplet(Joueur j)
    {
        // TO DO
        return false;
    }
}
